package com.zjhome.cloudnote.service;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.zjhome.cloudnote.domain.DirInfo;
import com.zjhome.cloudnote.param.DirPagingParam;

public interface DirService {

	/**
	 * 查询指定文件夹信息
	 * 
	 * @param id
	 * @param uid
	 * @return
	 * @throws Exception
	 */
	DirInfo selectDirById(String id, String uid) throws Exception;
	
	/**
	 * 查询目录下的子目录信息
	 * 
	 * @param did	目录id
	 * @param uid 	用户id
	 * @return
	 * @throws Exception
	 */
	List<DirInfo> selectSubDirsByDid(String did, String uid) throws Exception;
	
	
	/**
	 * 查询目录信息
	 * 
	 * @param dirInfo	查询参数
	 * @return
	 * @throws Exception
	 */
	List<DirInfo> selectDirsByParam(DirInfo dirInfo) throws Exception;
	
	
	/**
	 * 查询满足条件的目录数量
	 * 
	 * @param dirPagingParam	查询参数
	 * @return
	 * @throws Exception
	 */
	int selectDirsCountByPara(DirPagingParam dirPagingParam) throws Exception;
		
	
	/**
	 * 查询目录信息（分页）
	 * 
	 * @param dirPagingParam	查询参数
	 * @return
	 * @throws Exception
	 */
	List<DirInfo> selectDirsByParaPaging(DirPagingParam dirPagingParam) throws Exception;
	
	
	
	/**
	 * 获取目录树
	 * 
	 * @param pid	待查询根目录id
	 * @return
	 * @throws Exception
	 */
	List<DirInfo> selectDirTree(String pid, String uid) throws Exception; 
	
	
	
	/**
	 * 添加文件夹信息
	 * 
	 * @param dir	文件夹参数
	 * @return
	 * @throws Exception
	 */
	int insertDirByParam(DirInfo dirInfo) throws Exception;
	
	/**
	 * 更新文件夹信息
	 * 
	 * @param dir	文件夹参数
	 * @return
	 * @throws Exception
	 */
	int updateDirByParam(DirInfo dirInfo) throws Exception;
	
	/**
	 * 更新指定文件夹下的 子文件夹的 删除标志
	 * 
	 * @param pid		父文件夹id
	 * @param uid		用户id
	 * @param delflag	删除标志状态
	 * @return
	 * @throws Exception
	 */
	int updateDirDelFlagByDir(String pid, String uid, int delflag) throws Exception;
	
	
	/**
	 * 删除文件夹
	 * 
	 * @param id	文件夹id
	 * @param uid	用户id
	 * @return
	 * @throws Exception
	 */
	int deleteDirById(String id, String uid) throws Exception;
	
	/**
	 * 删除子文件夹
	 * 
	 * @param pid	父文件夹id
	 * @param uid	用户id
	 * @return
	 * @throws Exception
	 */
	int deleteSubDirById(String pid, String uid) throws Exception;
}
